package com.arpa.wms.service;

import com.arpa.wms.domain.dto.PickItemCancelQuantityDto;
import com.arpa.wms.domain.dto.PickingItemDTO;
import com.arpa.wms.domain.dto.PickingRegisterDTO;
import com.arpa.wms.domain.dto.WmsTaskDTO;
import com.arpa.wms.domain.entity.PickingItem;
import com.arpa.wms.domain.vo.PdaPickingRegisterVO;
import com.arpa.wms.domain.vo.PickingItemVO;
import com.arpa.wms.domain.vo.PickingItemWithRegisterVO;
import com.arpa.wms.domain.vo.PickingTaskItemVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 拣货明细 服务类
 * </p>
 *
 * @author LEO
 * @since 2020-08-07
 */
public interface IPickingItemService extends IService<PickingItem> {

    /**
     * 保存
     * @param entity
     * @return
     */
    @Override
    boolean save(PickingItem entity);

    /**
     * 根据code更新实体
     * @param entity
     * @return
     */
    int updateByCode(PickingItem entity);

    /**
     * 查询列表
     * @param pickingItemDTO
     * @return
     */
    List<PickingItemVO> queryList(PickingItemDTO pickingItemDTO);

    /**
     * 查询合计,包含总数
     * @param pickingItemDTO
     * @return
     */
    PickingItemVO queryListSum(PickingItemDTO pickingItemDTO);

    /**
     * @description
     * 查询拣货单与拣货确认单列表
     * @author xuyang
     * @date 2020/10/22 13:25
     * @param pickingItemDTO:
     **/
    List<PickingItemWithRegisterVO> queryItemWithRegisterList(PickingItemDTO pickingItemDTO);

    /**
     * @description
     *
     * @author
     * @date
     * @param pickingItemDTO:
     **/
    List<PickingItemWithRegisterVO> queryItemReturnRegisterList(PickingItemDTO pickingItemDTO);


    /**
     * @description
     * PDA查询未拣货任务明细
     * @author xuyang
     * @date 2020/10/24 8:30
     * @param registerDTO:
     **/
    List<PickingTaskItemVO> queryUnPickingList(PickingRegisterDTO registerDTO);

    /**
     * PDA获取拣货任务详情
     * @param pickingCode 拣货单号
     * @param location 拣货库位
     * @param goodsBarCode 商品条码
     * @return 拣货信息
     */
    PickingTaskItemVO getPickingInfoForPda(String pickingCode, String location, String goodsBarCode);


    /**
     * @description
     * PDA查询已拣货任务明细， 这个数据是从拣货确认表中查询的，为了便于与未拣货的一起管理，所以放在item这里
     * @author xuyang
     * @date 2020/10/24 8:30
     * @param wmsTaskDTO:
     **/
    List<PickingTaskItemVO> queryFinishPickingList(WmsTaskDTO wmsTaskDTO);

    /**
     * @description
     * 尝试更新子单状态，试探明细是否完成拣货
     * @author xuyang
     * @date 2020/10/26 10:16
     * @param pickingItemCode:
     **/
    int updateStatusIfFinish(String pickingItemCode, String finishStatus);

    /**
     * @description
     * 更新子单缺货量
     * @author xuyang
     * @date 2020/10/26 14:08
     * @param pickingItemCode:
     * @param stockoutQuantity:
     **/
    int updateStockout(String pickingItemCode, BigDecimal stockoutQuantity);

    /**
     * 批量更新拣货明细取消数量
     * @author liuxr
     * @date 2021/5/17 21:00
     * @param pickItemCancelQuantityDtoList
     */
    void updateCancelQuantityBatch(List<PickItemCancelQuantityDto> pickItemCancelQuantityDtoList);

    /**
     * 按单拣货，更新拣货明细拣货数量、缺货数量及拣货状态拣货完成
     * @author liuxr
     * @date 2021/5/27 20:36
     * @param temp
     */
    void singlePickingUpdateItemPickingQuantityAndStockoutQuantity(List<PickingItem> temp);

    /**
     * 通过拣货单号获取入驻商标识
     * @author liuxr
     * @date 2021/8/25 14:42
     * @param pickingCode
     * @return java.lang.String
     */
    String getShipmentCodeByPickingCode(String pickingCode,String groupCode);

    /**
     * 获取拣货确认列表
     * @author rfwang
     * @date 2022/1/27 10:13
     * @param registerDTO
     * @return
     */
    List<PdaPickingRegisterVO> pickingItemList(PickingRegisterDTO registerDTO);
}
